package com.hktf.corelib.utils;

import static com.hktf.corelib.utils.CommUtils.getResources;

import android.text.InputFilter;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.TextUtils;
import android.text.style.ForegroundColorSpan;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.ScaleAnimation;
import android.widget.EditText;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;


/**
 * Created by Administrator on 2016/9/6.
 */
public class UIUtils {

    /**
     * @param dimenId
     * @return
     */
    public static int getDimen(int dimenId) {
        float scaledDensity = getResources().getDisplayMetrics().scaledDensity;
        int textSize = (int) ((int) getResources()
                .getDimension(dimenId)
                / scaledDensity + 0.5f);
        return textSize;
    }
    /**
     * @param dip
     * @return
     */
    public static int dip2px(int dip) {
        // 公式 1: px = dp * (dpi / 160)
        // 公式 2: dp = px / denistity;
        DisplayMetrics metrics = getResources().getDisplayMetrics();
        float density = metrics.density;
        // metrics.densityDpi
        return (int) (dip * density + 0.5f);
    }

    public static int px2dip(int px) {
        // 公式 1: px = dp * (dpi / 160)
        // 公式 2: dp = px / denistity;
        DisplayMetrics metrics = getResources().getDisplayMetrics();
        float density = metrics.density;
        // metrics.densityDpi
        return (int) (px / density + 0.5f);
    }

    public static String getString(int resId) {
        return getResources().getString(resId);
    }


    public static String[] getStringArray(int resId) {
        return getResources().getStringArray(resId);
    }

    public static int getColor(int resId) {
        return getResources().getColor(resId);
    }

    public static boolean isEmpty(String s) {
        if (s == null || s.equals("")) {
            return true;
        }
        return false;
    }

    public static void setListViewHeightBasedOnChildren(ListView listView) {
        // 获取ListView对应的Adapter
        ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter == null) {
            return;
        }
        int totalHeight = 0;
        for (int i = 0, len = listAdapter.getCount(); i < len; i++) { // listAdapter.getCount()返回数据项的数目
            View listItem = listAdapter.getView(i, null, listView);
            listItem.measure(0, 0); // 计算子项View 的宽高
            totalHeight += listItem.getMeasuredHeight(); // 统计所有子项的总高度
        }
        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight
                + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        // listView.getDividerHeight()获取子项间分隔符占用的高度
        // params.height最后得到整个ListView完整显示需要的高度
        listView.setLayoutParams(params);
    }

    /**
     * 设置整个字符串中的指定字符串的为指定颜色
     *
     * @param origin   原字符串
     * @param colorStr 需要设置高亮的字符串
     * @param color    高亮的颜色
     * @return
     */
    public static SpannableString getColorSpannableString(String origin, String colorStr, int color) {
        SpannableString spannableString = new SpannableString(origin);
        if (!TextUtils.isEmpty(colorStr)) {
            int len = colorStr.length();
            for (int start = 0, end = 0; ; ) {
                start = origin.indexOf(colorStr, end);
                if (start != -1) {
                    end = start + len;
                    spannableString.setSpan(new ForegroundColorSpan(color),
                            start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
                } else {
                    break;
                }
            }
        }
        return spannableString;

    }

    public static void setText(TextView tv,String msg){
        if (tv == null||msg==null) {
            return;
        }
        tv.setText(msg);
    }

    public static void startScal(View view){
        Animation scaleAnimation = new ScaleAnimation(
                1.0f, 0.95f, // 从1.0倍到2.0倍缩放
                1.1f, 0.95f, // 从1.0倍到2.0倍缩放
                Animation.RELATIVE_TO_SELF, 0.5f, // 缩放中心在对象的中心
                Animation.RELATIVE_TO_SELF, 0.5f // 缩放中心在对象的中心
        );
        scaleAnimation.setDuration(500); // 动画持续时间1000毫秒
        scaleAnimation.setFillAfter(true); // 动画结束后保持结束状态
        scaleAnimation.setRepeatMode(Animation.REVERSE);
        scaleAnimation.setRepeatCount(Animation.INFINITE);
        view.startAnimation(scaleAnimation);
    }

    /**
     * 为EditText设置最大输入长度
     * @param editText 目标EditText
     * @param maxLength 最大输入字数
     */
    public static void setEditTextMaxLength(EditText editText, Integer maxLength) {
        if (editText == null||maxLength==null) return;

        // 创建输入过滤器
        InputFilter[] filters = new InputFilter[1];
        filters[0] = new InputFilter.LengthFilter(maxLength) {
            @Override
            public CharSequence filter(CharSequence source, int start, int end,
                                       Spanned dest, int dstart, int dend) {
                // 可以在这里添加超出长度的提示逻辑
                int currentLength = dest.length();
                int inputLength = end - start;

                // 当输入后总长度超过最大值时
                if (currentLength + inputLength > maxLength) {
                    // 可在这里添加Toast提示等
                    // Toast.makeText(MainActivity.this,
                    //     "最多输入" + maxLength + "个字符", Toast.LENGTH_SHORT).show();
                    return ""; // 截断输入
                }
                return super.filter(source, start, end, dest, dstart, dend);
            }
        };

        // 应用过滤器
        editText.setFilters(filters);
    }
}
